#!/bin/bash

# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m' # 无颜色

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 设置工作目录
APP_DIR="/var/www/box-admin"
cd $APP_DIR
source venv/bin/activate

# 设置环境变量
export FLASK_APP=app.py
export FLASK_ENV=production
export DATABASE_URL="mysql+pymysql://csss:12345@106.15.51.42:3306/csss"

log_info "开始初始化数据库..."

# 检查数据库连接
log_info "检查数据库连接..."
python3 -c "
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://csss:12345@106.15.51.42:3306/csss')
try:
    connection = engine.connect()
    connection.close()
    print('数据库连接成功!')
except Exception as e:
    print(f'数据库连接失败: {e}')
    exit(1)
"

if [ $? -ne 0 ]; then
    log_error "数据库连接失败，请检查连接信息"
    exit 1
fi

# 检查是否已经初始化迁移环境
if [ ! -d "migrations" ]; then
    log_info "初始化迁移环境..."
    flask db init
else
    log_info "迁移环境已存在，跳过初始化"
fi

# 检查是否需要迁移
log_info "检查数据库变更..."
migrate_output=$(flask db migrate -m "自动迁移" 2>&1)
echo "$migrate_output"

if echo "$migrate_output" | grep -q "No changes in schema detected"; then
    log_info "数据库结构与模型一致，无需迁移"
else
    log_info "检测到数据库变更，正在应用..."
    flask db upgrade
    log_info "数据库变更应用完成"
fi

# 检查管理员账号
log_info "检查管理员账号..."
admin_check=$(python3 -c "
from app import create_app, db
from app.models.users import User
import os

app = create_app(os.getenv('FLASK_ENV', 'production'))

with app.app_context():
    # 检查是否已存在管理员账号
    admin = User.query.filter_by(username='admin').first()
    if not admin:
        admin = User(
            username='admin',
            email='admin@example.com',
            role='admin',
            is_active=True
        )
        admin.set_password('admin')
        db.session.add(admin)
        db.session.commit()
        print('admin_created')
    else:
        print('admin_exists')
")

if [ "$admin_check" = "admin_created" ]; then
    log_info "管理员账号创建成功!"
    log_info "管理员登录信息:"
    log_info "  用户名: admin"
    log_info "  密码: admin"
    log_warn "请在首次登录后立即修改默认密码!"
elif [ "$admin_check" = "admin_exists" ]; then
    log_info "管理员账号已存在，无需创建"
else
    log_error "管理员账号检查失败，请手动检查"
fi

log_info "数据库初始化过程完成!"

# 检查数据库表
log_info "验证数据库表结构..."
python3 -c "
from app import create_app, db
import os

app = create_app(os.getenv('FLASK_ENV', 'production'))

with app.app_context():
    # 获取所有模型类
    from app.models.users import User
    from app.models.blind_box import BlindBox
    from app.models.order import Order
    
    # 验证关键表是否存在
    tables = db.engine.table_names()
    required_tables = ['user', 'blind_box', 'order']
    
    missing_tables = [table for table in required_tables if table not in tables]
    
    if missing_tables:
        print(f'警告: 以下表未找到: {", ".join(missing_tables)}')
        exit(1)
    else:
        print('所有必要的表都已创建')
"

if [ $? -eq 0 ]; then
    log_info "数据库结构验证通过!"
else
    log_warn "数据库结构验证失败，可能需要手动检查"
fi 